from django.http import JsonResponse
from django.views import View
from .serializers  import ProductModelSerializer
from product.models import Product
import json
from django.shortcuts import get_object_or_404


# url: /products/ GET POST
# url: /products/<int:pk>/ GET PUT DELETE
# Create your views here.
class ProductsView(View):
    """
    商品列表 Models.objects.all()
    商品添加 Models.objects.create()
    """
    def get(self, request):
        # 获取所有的商品数据
        products = Product.objects.all()

        # 把商品数据传递给序列化函数进行处理
        #  要给序列化器传递两个参数
        #  1. 要序列化的数据
        #  2. many=True 表示要序列化的数据是一个列表
        ser = ProductModelSerializer(products, many=True)
     
        data = {
            "message": "商品列表获取成功",
            "data": ser.data
        }
        return JsonResponse(data=data, safe=False)

    def post(self, request):
        # 商品添加
        # 1. 获取前端传递过来的数据
        # 把 json 数据转换为 Python 字典，反序列化
        dict_data = json.loads(request.body)
        ser = ProductModelSerializer(data=dict_data)

        # 2. 把数据保存到数据库
        if ser.is_valid():
            # 保存数据
            product = ser.save()
            # 把保存成功的数据返回给前端
            data = {
                'message': "商品添加成功!",
                "data": ProductModelSerializer(product).data
            }

            # 3. 返回响应
            return JsonResponse(data, status=200)
        else:
            # 3.1 数据验证失败
            return JsonResponse(ser.errors, status=400)
class ProductDetailView(View):
    """"
    详情 id
    修改 id
    删除 id
    """
    
    def get(self, request, pk):
        # 获取商品详情 get
        # try:
        #     product = Product.objects.get(pk=pk)
        #     # 当前的 product 是一个对象实例，不需要迭代
        #     dict_data = {
        #             "id": product.id, 
        #             "name": product.product_name,
        #             "cover": f"http://127.0.0.1:8000{product.cover.url}" if product.cover else None,
        #             "price": product.price,
        #             "popularity": product.popularity,
        #             "stock": product.stock,
        #             "is_active": product.is_active,
        #         }

        #     data = {
        #             "message": "商品详情获取成功",
        #             "data": dict_data,
             
        #     }
        #     return JsonResponse(data=data, safe=False, status=200)
    
        # except Product.DoesNotExist:
        #     return JsonResponse({"message": "商品不存在"}, status=404)

        # 优化
        product = get_object_or_404(Product, pk=pk)
        # 指定序列化的模型
        ser = ProductModelSerializer(product)
        data = {
            "message": "商品详情获取成功",
            "data": ser.data,
        
        }
        return JsonResponse(data=data, safe=False, status=200)

    def put(self, request, pk):
        """
        1.获取pk
        2.获取前端传递过来的数据
        3.根据pk 获取对应的数据
        4.更新数据 
        5.保存数据
        6.返回响应
        """
        product = Product.objects.get(pk=pk)
        # 1.获取前端传递过来的数据
        # 把 json 数据转换为 Python 字典，反序列化
        json_data = json.loads(request.body)
        name = json_data.get('name', '')
        cover = json_data.get('cover', '')
        price = json_data.get('price', '')
        stock = json_data.get('stock', '')
        is_active = json_data.get('is_active', False)

        # 2.更新数据
        product.product_name = name
        product.cover = cover
        product.price = price
        product.stock = stock
        product.is_active = is_active

        # 3.保存数据
        product.save()
        # 4.返回响应
        return JsonResponse({'message': "商品修改成功!"})
    def delete(self, request, pk):
        """
        1.获取pk
        2.根据pk 获取对应的数据
        3.删除数据
        4.返回响应
        """
        Product.objects.get(pk=pk).delete()
        return JsonResponse({})